package com.aek.ebey.sys.service;

import java.util.List;

import com.aek.common.core.base.BaseService;
import com.aek.ebey.sys.model.SysTenant;
import com.aek.ebey.sys.model.SysUser;
import com.aek.ebey.sys.model.query.TenantQuery;
import com.baomidou.mybatisplus.plugins.Page;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author aek
 * @since 2017-05-06
 */
public interface SysTenantService extends BaseService<SysTenant> {

	/**
	 * 上级创建子机构
	 * 
	 * @param tenant
	 *            机构信息
	 * @param admin
	 *            管理员信息(null, 则不创建管理员)
	 */
	void createSubTenant(SysTenant tenant, SysUser admin);

	/**
	 * 上级修改子机构
	 * 
	 * @param tenant
	 *            机构信息
	 * 
	 * @param admin
	 *            管理员信息
	 * 
	 */
	void modifySubTenant(SysTenant tenant, SysUser admin);

	/**
	 * 查询所有下属机构(包含子机构的子机构)
	 * 
	 * @param tenantId
	 * @return
	 */
	List<SysTenant> findAllSubTenant(Long tenantId);

	/**
	 * 分页查询子机构列表
	 * 
	 * @param query
	 *            查询条件
	 * @return
	 */
	Page<SysTenant> findPageByKeyword(TenantQuery query);

	/**
	 * 停用机构
	 * 
	 * @param tenantId
	 */
	void stopTenantById(Long tenantId);

	/**
	 * 恢复机构
	 * 
	 * @param tenantId
	 */
	void recoverTenantById(Long tenantId);

	/**
	 * 删除机构(逻辑删除)
	 * 
	 * @param tenantId
	 */
	void deleteTenantById(Long tenantId);

	/**
	 * 机构快速延期
	 * 
	 * @param updateBy
	 *            修改人
	 * @param tenantId
	 *            机构ID
	 * @param days
	 *            天
	 */
	void delayTenant(Long updateBy, Long tenantId, Integer days);

	/**
	 * 查询用户可见的机构(在该机构拥有角色则可见,机构管理员可见所有子机构)
	 * 
	 * @param userId
	 * @return
	 */
	List<SysTenant> findUserSeeTenant(Long userId);

}
